package com.cassioso.redeneural.memoria;

/**
 * Representa uma forma certa, i.e uma tabela com o desenho correto
 * (representado pela distribuição de valores em uma matriz) de uma das formas
 * esperadas pelo sistema, assim como o seu título (nome) e seu gabarito ou
 * resultado esperado.
 */
public class Forma {

	/**
	 * Nome da forma
	 */
	private String nome;

	/**
	 * Valores na matriz
	 */
	private double valor[][] = new double[10][10];

	/**
	 * Valor
	 */
	private int gabarito[] = new int[5];

	/**
	 * Retorna o nome da forma
	 */
	public String getNome() {
		return nome;
	}
	
	/**
	 * Define o nome da forma. Aqui também é definido o "gabarito", i.e o
	 * resultado esperado.
	 * 
	 * @param txt
	 */
	public void setNome(String txt) {
		for (int i = 0; i < UtilM.FORMAS.length; i++) {
			if (UtilM.FORMAS[i].toLowerCase().contains(txt.toLowerCase())) {
				this.nome = UtilM.FORMAS[i];
				this.gabarito = UtilM.getGabarito(i);
				break;
			}
		}
	}

	/**
	 * Retorna o valor
	 * @return
	 */
	public double[][] getValor() {
		return valor;
	}

	/**
	 * Retorna o gabarito
	 * @return
	 */
	public int[] getGabarito() {
		return gabarito;
	}

	/**
	 * Define o valor
	 * @param i
	 * @param valores
	 */
	public void setValor(int i, String valores) {
		for (int j = 0; j < 10; j++) {
			this.valor[i][j] = getValor(valores.charAt(j));
		}
	}

	/**
	 * Retorna o valor
	 * @param x
	 * @return
	 */
	public int getValor(char x) {
		if (x == '1')
			return 1;
		else
			return -1;
	}

	public String toString() {
		String temp = "\n----------\n----------";
		temp += "\nNome: " + this.nome;
		temp += "\nValores: \n";
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				if (valor[i][j] == 1)
					temp += " ";
				temp += "  " + valor[i][j];
			}
			temp += "\n";
		}
		temp += "\nGabarito:\n{";
		for (int i = 0; i < this.gabarito.length; i++) {
			temp += "  " + gabarito[i];

		}
		temp += "  }";

		temp += "\n----------\n----------";

		return temp;

	}

	public static void main(String args[]) {
		Forma fc = new Forma();
		fc.setNome("quadrado");
		System.out.println(fc);
	}
}
